package Day_0201.JUC;

/**
 * @author zxc
 * @date 2023/02/01 22:20
 **/
public class CyclicBarrier_CountDownLatch {
    public static void main(String[] args) {
        /**
         * CyclicBarrier和CountDownLatch的区别
         * ===》
         * 1.共同点
         * 都在java.util.concurrent下，都可以用来表示代码运行到某个点上，
         *
         * 2.不同点
         * （1）CyclicBarrier的某个线程运行到某个点上之后，该线程即停止运行，直到所有的线程都到达了这个点，所有线程才重新运行;
         *  CountDownLatch则不是，某线程运行到某个点上之后，只是给某个数值-1而已，该线程继续运行;
         *  ===》
         *  总结 ：
         *  （1）CyclicBarrier ：即，某个线程到达某个点后，停止运行，直至所有线程都到达这个点之后，所有线程才会去继续运行;
         *  （即，通俗易懂地说，所有线程等待最后一个到达的线程;）
         *  （2）CountDownLatch ：即，指定一个/多个线程，等待另外n个线程执行完后，再继续进行执行;
         *  （即，通俗易懂地说，就是指定线程去等待另外n个线程执行完毕;）
         *
         * （2）CyclicBarrier只能唤起一个任务，
         *  CountDownLatch可以唤起多个任务
         *
         * （3）CyclicBarrier可重用，
         *  CountDownLatch不可重用，计数值为0,该CountDownLatch就不可再用了
         */
    }
}
